Transcriptional profile PCA and differential gene expression (DGA)
RNA-seq
RNA was isolated and sequenced from the various cell types.
DEseq2 PCA

DEseq2 PCA (dupRadar)

PCA GSEA
PC1 GSEA

PC2 GSEA

combinations
Differential Gene Expression
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
LS0tCnRpdGxlOiAiRXhwbG9yaW5nIFJhaidzIFNhbXBsZXMiCmF1dGhvcjogPGEgaHJlZj0iaHR0cHM6Ly9jaGVsYS1qYW1lcy5naXRodWIuaW8vIj4gPGgzPiBDaGVsYSBKYW1lcyA8L2gzPiA8L2E+IFxuZXdsaW5lIENhbmNlciBJbnN0aXR1dGUsIFVDTCwgVUsKZGF0ZTogMTUgQXBybCAyMDE5Cm91dHB1dDoKICBib29rZG93bjo6aHRtbF9kb2N1bWVudDI6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jX2RlcHRoOiAzCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIHRoZW1lOiB1bml0ZWQKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIGRmX3ByaW50OiBwYWdlZAogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQogICAga2VlcF9tZDogZmFsc2UKICAgIGVuY29kaW5nOiAiVVRGLTgiCmVkaXRvcl9vcHRpb25zOiAKICBjaHVua19vdXRwdXRfdHlwZTogY29uc29sZQotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQpodG1sdG9vbHM6OnRhZ0xpc3Qocm1hcmtkb3duOjpodG1sX2RlcGVuZGVuY3lfZm9udF9hd2Vzb21lKCkpCmtuaXRyOjpvcHRzX2NodW5rJHNldChldmFsID0gVFJVRSwgY2FjaGUgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpCmBgYAoKCmBgYHtyLCAgb3V0LndpZHRoID0gIjEwMCUiLCBlY2hvID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KbGlicmFyeShrbml0cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHN2YSkKbGlicmFyeShkcGx5cikKbGlicmFyeShwcmVwcm9jZXNzQ29yZSkKbGlicmFyeShnZ3JlcGVsKQpsaWJyYXJ5KEJpb2Jhc2UpCmxpYnJhcnkodGliYmxlKQpsaWJyYXJ5KHNjYXRlcikKbGlicmFyeShnZ2hpZ2hsaWdodCkKbGlicmFyeShhbm5vdGFibGVzKQpsaWJyYXJ5KERFU2VxMikKbGlicmFyeShmZ3NlYSkKbGlicmFyeShEVCkKbGlicmFyeShwdXJycikKbGlicmFyeShzdHJpbmdyKQpsaWJyYXJ5KGdncmVwZWwpCmxpYnJhcnkoaHlwZVIpCmBgYAoKCgpgYGB7cn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgY2FjaGUgPSBUUlVFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkKYGBgCgojIFRyYW5zY3JpcHRpb25hbCBwcm9maWxlIFBDQSBhbmQgZGlmZmVyZW50aWFsIGdlbmUgZXhwcmVzc2lvbiAoREdBKQoKIyMgUk5BLXNlcQoKUk5BIHdhcyBpc29sYXRlZCBhbmQgc2VxdWVuY2VkIGZyb20gdGhlIHZhcmlvdXMgY2VsbCB0eXBlcy4KCiMjIFNhbXBsZSBzdW1tYXJ5CgpgYGB7cn0Kc2FtcGxlX3RhYmxlIDwtIHJlYWR4bDo6cmVhZF94bHN4KCdLZXkueGxzeCcpCnNhbXBsZV90YWJsZSA8LSBkYXRhLmZyYW1lKHNhbXBsZV90YWJsZSkKY29sbmFtZXMoc2FtcGxlX3RhYmxlKSA8LSBjKCJpbmRleCIsICJzYW1wbGVfbmFtZSIsICJvcmlnaW4iLCAiZG9ub3IiLCAiZGF5IiwgInByb3RvY29sIiwgInBvcHVsYXRpb24iLCAiY29sb3VyIikKCmRhdGF0YWJsZShzYW1wbGVfdGFibGUsb3B0aW9ucz1saXN0KGNvbHVtbkRlZnMgPSBsaXN0KGxpc3QodmlzaWJsZT1GQUxTRSwgdGFyZ2V0cz04KSksICAgcGFnZUxlbmd0aCA9IDI5KSkgJT4lIAogIGZvcm1hdFN0eWxlKCAiY29sb3VyIix0YXJnZXQgPSAncm93JywgYmFja2dyb3VuZENvbG9yID0gc3R5bGVFcXVhbChzYW1wbGVfdGFibGUkY29sb3VyICxzYW1wbGVfdGFibGUkY29sb3VyKSkKICAKYGBgCgojIyMgVXNpbmcgW3NjYXRlcl0oaHR0cHM6Ly9iaW9jb25kdWN0b3Iub3JnL3BhY2thZ2VzL3JlbGVhc2UvYmlvYy9odG1sL3NjYXRlci5odG1sKSBub3JtYWxpemF0aW9uIAoKYGBge3J9CgojIHJlYWQgaW4gdGhlIGNvdW50cyBtYXRyaXggKGluIHRoaXMgaW5zdGFuY2UgZ2VuZXJhdGVkIGJ5IFFvUlRzKQoKYmlnX2NvdW50cyA8LSByZWFkLnRhYmxlKCdhcmlhbmVfcW9ydHNfY291bnRzX2FycmF5LnR4dCcsc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLCBoZWFkZXIgPSBUUlVFKQoKY291bnRfbWF0cml4IDwtIGFzLm1hdHJpeChiaWdfY291bnRzKQoKc2NlIDwtIFNpbmdsZUNlbGxFeHBlcmltZW50KGxpc3QoY291bnRzID0gY291bnRfbWF0cml4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbERhdGEgPSBzYW1wbGVfdGFibGUpCnNjZSA8LSBzY2Vbcm93U3Vtcyhjb3VudHMoc2NlKSkgPiAgMCxdCnNjZSA8LSBjYWxjdWxhdGVRQ01ldHJpY3Moc2NlKQoKYGBgCgpgYGB7cn0KIyMgcHJlcGFyZSB0b3RhbCBjb3VudCBhbmQgdG90YWwgZmVhdHVyZXMgZGF0YQoKbXlfZGYgPC0gZGF0YS5mcmFtZSgic2FtcGxlX2lkIiA9IGNvbG5hbWVzKHNjZSksICJ0b3RhbF9jb3VudHMiID0gc2NlJHRvdGFsX2NvdW50cywKICAgICAgICAgICAgICAgICAgICAidG90YWxfZmVhdHVyZXMiID0gc2NlJHRvdGFsX2ZlYXR1cmVzX2J5X2NvdW50cyApCmdncGxvdChteV9kZixhZXModG90YWxfY291bnRzKSkgKyBnZW9tX2hpc3RvZ3JhbShiaW5zID0gMjkpICsgCiAgdGhlbWVfbWluaW1hbCgpICsgZ2d0aXRsZSgiSGlzdG9ncmFtIG9mIHRvdGFsIGNvdW50cyIpICsgeWxhYigibnVtYmVyIG9mIHNhbXBsZXMiKSArIHhsYWIoInRvdGFsIGNvdW50cyIpCmBgYAoKYGBge3J9CmdncGxvdChteV9kZixhZXModG90YWxfZmVhdHVyZXMpKSArIGdlb21faGlzdG9ncmFtKGJpbnMgPSAyOSkgKyAKICB0aGVtZV9taW5pbWFsKCkgKyBnZ3RpdGxlKCJIaXN0b2dyYW0gb2YgdG90YWwgZmVhdHVyZXMiKSArIHlsYWIoIm51bWJlciBvZiBzYW1wbGVzIikgKyB4bGFiKCJ0b3RhbCBmZWF0dXJlcyIpCgpgYGAKCiMjIERFc2VxMiBQQ0EKCmBgYHtyfQpteV9wYWxldHRlIDwtIGMoImJ1cmx5d29vZCIgPSAiYnVybHl3b29kIiwgImNob2NvbGF0ZSIgPSAgImNob2NvbGF0ZSIgLCAiaG9uZXlkZXciID0gImhvbmV5ZGV3IiwgICJsaWdodGJsdWUiID0gImxpZ2h0Ymx1ZSIsICAKICJsaWdodHNreWJsdWUiID0gImxpZ2h0c2t5Ymx1ZSIsICAibW9jY2FzaW4iID0gIm1vY2Nhc2luIiwgICJvbGl2ZWRyYWIiID0gIm9saXZlZHJhYiIsICAic2FuZHlicm93biIgPSAic2FuZHlicm93biIsCiAid2hpdGUiID0gIndoaXRlIikKCm15X2NvbGRhdGEgPC0gc2FtcGxlX3RhYmxlCgpteV9jb2xkYXRhJGluZGV4IDwtIGMocGFzdGUwKCJBMCIsIHNhbXBsZV90YWJsZSRpbmRleFsxOjldKSwgcGFzdGUwKCJBIiwgc2FtcGxlX3RhYmxlJGluZGV4WzEwOmxlbmd0aChzYW1wbGVfdGFibGUkaW5kZXgpXSkpCnJvd25hbWVzKG15X2NvbGRhdGEpIDwtIG15X2NvbGRhdGEkaW5kZXgKYmlnX2NvdW50cyA8LSBiaWdfY291bnRzWywgbXlfY29sZGF0YSRpbmRleF0KZGRzIDwtIERFU2VxRGF0YVNldEZyb21NYXRyaXgoYmlnX2NvdW50cywgY29sRGF0YSA9IG15X2NvbGRhdGEsIGRlc2lnbiA9IH5jb2xvdXIpCgpteV92c3QgPC0gdnN0KGRkcykKCnBjYURhdGEgPC0gREVTZXEyOjpwbG90UENBKG15X3ZzdCwgaW50Z3JvdXAgPSBjKCJjb2xvdXIiLCJvcmlnaW4iLCJpbmRleCIpLHJldHVybkRhdGEgPSBUUlVFKQpwZXJjZW50VmFyIDwtIHJvdW5kKDEwMCAqIGF0dHIocGNhRGF0YSwgInBlcmNlbnRWYXIiKSkKCmdncGxvdChwY2FEYXRhLGFlcyhQQzEsUEMyLGxhYmVsID0gaW5kZXgpKSArCiAgICAgICAgZ2VvbV9wb2ludChzaXplID0gNCwgYWVzKHNoYXBlID0gb3JpZ2luLCBmaWxsID0gY29sb3VyKSwgY29sb3VyICA9ICJibGFjayIpICsKICAgICAgICBndWlkZXMoZmlsbCA9IEZBTFNFICkgKwogICAgICAgIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDIxLDI0KSkgKwogICAgICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IG15X3BhbGV0dGUpICsKICAgICAgICB4bGFiKHBhc3RlMCgiUEMxOiAiLHBlcmNlbnRWYXJbMV0sIiUgdmFyaWFuY2UiKSkgKwogICAgICAgIHlsYWIocGFzdGUwKCJQQzI6ICIscGVyY2VudFZhclsyXSwiJSB2YXJpYW5jZSIpKSArIGdlb21fdGV4dF9yZXBlbChzaG93LmxlZ2VuZCA9IEZBTFNFKSArIAogICAgICAgIHRoZW1lX21pbmltYWwoKSArIGdndGl0bGUobGFiZWwgPSAiUENBIHVzaW5nIGNvdW50cyBkYXRhIikKYGBgCgoKCiMjIERFc2VxMiBQQ0EgKGR1cFJhZGFyKQoKYGBge3J9CgpkdXBSYmlnX2NvdW50cyA8LSByZWFkLnRhYmxlKCdhcmlhbmVfZHVwcmFkYXJfY291bnRzX21hdHJpeC50eHQnLHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSwgaGVhZGVyID0gVFJVRSkKCmR1cFJiaWdfY291bnRzIDwtIGJpZ19jb3VudHNbLCBteV9jb2xkYXRhJGluZGV4XQoKZHVwUmRkcyA8LSBERVNlcURhdGFTZXRGcm9tTWF0cml4KGR1cFJiaWdfY291bnRzLCBjb2xEYXRhID0gbXlfY29sZGF0YSwgZGVzaWduID0gfmNvbG91cikKZHVwUm15X3ZzdCA8LSB2c3QoZHVwUmRkcykKCmR1cFJwY2FEYXRhIDwtICBERVNlcTI6OnBsb3RQQ0EobXlfdnN0LCBpbnRncm91cCA9IGMoImNvbG91ciIsIm9yaWdpbiIsImluZGV4IikscmV0dXJuRGF0YSA9IFRSVUUpCmR1cFJwZXJjZW50VmFyIDwtIHJvdW5kKDEwMCAqIGF0dHIoZHVwUnBjYURhdGEsICJwZXJjZW50VmFyIikpCgpnZ3Bsb3QocGNhRGF0YSxhZXMoUEMxLFBDMixsYWJlbCA9IGluZGV4KSkgKwogICAgICAgIGdlb21fcG9pbnQoc2l6ZSA9IDQsIGFlcyhzaGFwZSA9IG9yaWdpbiwgZmlsbCA9IGNvbG91ciksIGNvbG91ciAgPSAiYmxhY2siKSArCiAgICAgICAgZ3VpZGVzKGZpbGwgPSBGQUxTRSApICsKICAgICAgICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygyMSwyNCkpICsKICAgICAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBteV9wYWxldHRlKSArCiAgICAgICAgeGxhYihwYXN0ZTAoIlBDMTogIixwZXJjZW50VmFyWzFdLCIlIHZhcmlhbmNlIikpICsKICAgICAgICB5bGFiKHBhc3RlMCgiUEMyOiAiLHBlcmNlbnRWYXJbMl0sIiUgdmFyaWFuY2UiKSkgKyBnZW9tX3RleHRfcmVwZWwoc2hvdy5sZWdlbmQgPSBGQUxTRSkgKyAKICAgICAgICB0aGVtZV9taW5pbWFsKCkgKyBnZ3RpdGxlKGxhYmVsID0gIlBDQSB1c2luZyBjb3VudHMgZGF0YSIpCmBgYAoKCiMjIFBDQSBHU0VBCgojIyMgUEMxIEdTRUEKCmBgYHtyfQpIQUxMTUFSSyA8LSBtc2lnZGJfZG93bmxvYWRfb25lKHNwZWNpZXM9IkhvbW8gc2FwaWVucyIsIGNhdGVnb3J5PSJIIikKCnBjYTFfZ3NlYSA9IGZ1bmN0aW9uKG9iamVjdCkgewogICMgY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBmb3IgZWFjaCBnZW5lCiAgcnYgPC0gcm93VmFycyhhc3NheShvYmplY3QpKQoKICAjIHNlbGVjdCB0aGUgMTAwMCB0b3AgZ2VuZXMgYnkgdmFyaWFuY2UKICBzZWxlY3QgPC0gb3JkZXIocnYsIGRlY3JlYXNpbmc9VFJVRSlbc2VxX2xlbihtaW4oMjAwMCwgbGVuZ3RoKHJ2KSkpXQoKICAjIHBlcmZvcm0gYSBQQ0Egb24gdGhlIGRhdGEgaW4gYXNzYXkoeCkgZm9yIHRoZSBzZWxlY3RlZCBnZW5lcwogIHBjYSA8LSBwcmNvbXAodChhc3NheShvYmplY3QpW3NlbGVjdCxdKSkKCiAgUENBMV9jb250cmliIDwtIHNvcnQocGNhJHJvdGF0aW9uWywxXSwgZGVjcmVhc2luZyA9IFRSVUUgKQogIFBDQTFfY29udHJpYiA8LSBkYXRhLmZyYW1lKCJlbnNnZW5lIiA9IG5hbWVzKFBDQTFfY29udHJpYiksIFBDQTFfY29udHJpYikKICBQQ0ExX2NvbnRyaWIgPC0gbGVmdF9qb2luKFBDQTFfY29udHJpYixncmNoMzgsYnk9ImVuc2dlbmUiKQogIFBDQTFfY29udHJpYiA8LSBQQ0ExX2NvbnRyaWJbY29tcGxldGUuY2FzZXMoUENBMV9jb250cmliJHN5bWJvbCksXQogIGZvcl9nc2VhIDwtIFBDQTFfY29udHJpYiRQQ0ExX2NvbnRyaWIgIAogIG5hbWVzKGZvcl9nc2VhKSA8LSBQQ0ExX2NvbnRyaWIkc3ltYm9sCiAgZmdzZWFSZXMgPC0gZmdzZWEoSEFMTE1BUkssIGZvcl9nc2VhLCBucGVybT0xMDAwMCwgbWF4U2l6ZSA9IDUwMCkKICBmZ3NlYVJlcyA8LSBmZ3NlYVJlc1tmZ3NlYVJlcyRwYWRqIDwgMC4wNSxdCiAgcGxvdEdzZWFUYWJsZShIQUxMTUFSS1tmZ3NlYVJlcyRwYXRod2F5XSwgZm9yX2dzZWEsIGZnc2VhUmVzLCBnc2VhUGFyYW0gPSAwLjQpCiAgcmV0dXJuKFBDQTFfY29udHJpYikKfQpwYzFfcmVzPC1wY2ExX2dzZWEobXlfdnN0KQpgYGAKCiMjIyBHZW5lcyBEcml2aW5nIFBDMQoKYGBge3J9CgpkYXRhdGFibGUocGMxX3JlcyxvcHRpb25zID0gbGlzdChkb20gPSAnQmZydGlwJyxidXR0b25zID0gYygnY29weScsICdjc3YnLCAnZXhjZWwnKSkpCgpgYGAKCgojIyMgUEMyIEdTRUEKCmBgYHtyfQoKcGNhMl9nc2VhID0gZnVuY3Rpb24ob2JqZWN0KSB7CiAgIyBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIGZvciBlYWNoIGdlbmUKICBydiA8LSByb3dWYXJzKGFzc2F5KG9iamVjdCkpCgogICMgc2VsZWN0IHRoZSAxMDAwIHRvcCBnZW5lcyBieSB2YXJpYW5jZQogIHNlbGVjdCA8LSBvcmRlcihydiwgZGVjcmVhc2luZz1UUlVFKVtzZXFfbGVuKG1pbigyMDAwLCBsZW5ndGgocnYpKSldCgogICMgcGVyZm9ybSBhIFBDQSBvbiB0aGUgZGF0YSBpbiBhc3NheSh4KSBmb3IgdGhlIHNlbGVjdGVkIGdlbmVzCiAgcGNhIDwtIHByY29tcCh0KGFzc2F5KG9iamVjdClbc2VsZWN0LF0pKQoKICBQQ0EyX2NvbnRyaWIgPC0gc29ydChwY2Ekcm90YXRpb25bLDJdLCBkZWNyZWFzaW5nID0gVFJVRSApCiAgUENBMl9jb250cmliIDwtIGRhdGEuZnJhbWUoImVuc2dlbmUiID0gbmFtZXMoUENBMl9jb250cmliKSwgUENBMl9jb250cmliKQogIFBDQTJfY29udHJpYiA8LSBsZWZ0X2pvaW4oUENBMl9jb250cmliLGdyY2gzOCxieT0iZW5zZ2VuZSIpCiAgUENBMl9jb250cmliIDwtIFBDQTJfY29udHJpYltjb21wbGV0ZS5jYXNlcyhQQ0EyX2NvbnRyaWIkc3ltYm9sKSxdCiAgZm9yX2dzZWEgPC0gUENBMl9jb250cmliJFBDQTJfY29udHJpYiAgCiAgbmFtZXMoZm9yX2dzZWEpIDwtIFBDQTJfY29udHJpYiRzeW1ib2wKICBmZ3NlYVJlcyA8LSBmZ3NlYShIQUxMTUFSSywgZm9yX2dzZWEsIG5wZXJtPTEwMDAwLCBtYXhTaXplID0gNTAwKQogIGZnc2VhUmVzIDwtIGZnc2VhUmVzW2Znc2VhUmVzJHBhZGogPCAwLjA1LF0KICBwbG90R3NlYVRhYmxlKEhBTExNQVJLW2Znc2VhUmVzJHBhdGh3YXldLCBmb3JfZ3NlYSwgZmdzZWFSZXMsIGdzZWFQYXJhbSA9IDAuNCkKICByZXR1cm4oUENBMl9jb250cmliKQp9CnBjYTJfcmVzIDwtIHBjYTJfZ3NlYShteV92c3QpCmBgYAoKCiMjIyBHZW5lcyBEcml2aW5nIFBDMgoKYGBge3J9CmRhdGF0YWJsZShwY2EyX3JlcyxvcHRpb25zID0gbGlzdChkb20gPSAnQmZydGlwJyxidXR0b25zID0gYygnY29weScsICdjc3YnLCAnZXhjZWwnKSkpCmBgYAoKCiMjIGNvbWJpbmF0aW9ucwoKYGBge3IgZXZhbCA9IEZBTFNFIH0KbGlicmFyeShndG9vbHMpCm15X2NvbWJpbmF0aW9ucyA8LSBkYXRhLmZyYW1lKGNvbWJpbmF0aW9ucyhuPTYscj0yLHY9dW5pcXVlKHNhbXBsZV90YWJsZSRHUk9VUC5OQU1FKSksc3RyaW5nc0FzRmFjdG9ycyA9IEYpCgpjb2xuYW1lcyhteV9jb21iaW5hdGlvbnMpIDwtIGMoImZpcnN0Iiwic2Vjb25kIikKCmRhdGF0YWJsZShteV9jb21iaW5hdGlvbnMpCmBgYAoKIyMgRGlmZmVyZW50aWFsIEdlbmUgRXhwcmVzc2lvbgojIyMgMS4KCmBgYHtyIGV2YWwgPSBGQUxTRX0KI2Rlc2VxIDwtIERFU2VxKGRkcykKI3NhdmVSRFMoZGVzZXEsInZ0NDBfZGVzZXEucmRzIikKZGVzZXEgPC0gcmVhZFJEUygidnQ0MF9kZXNlcS5yZHMiKQoKREdFIDwtIGZ1bmN0aW9uKGMxLGMyKXsgCnJlcyA8LSByZXN1bHRzKGRlc2VxLGNvbnRyYXN0ID0gYygiR1JPVVAuTkFNRSIsIGMxLCBjMikpCnJlc09yZGVyZWQgPC0gcmVzW29yZGVyKHJlcyRwYWRqKSxdCnJlc09yZGVyZWQgPC0gcmVzT3JkZXJlZFtjb21wbGV0ZS5jYXNlcyhyZXNPcmRlcmVkKSxdCnJlc09yZGVyZWQgPC0gZGF0YS5mcmFtZShyZXNPcmRlcmVkKQpyZXNPcmRlcmVkIDwtIGxlZnRfam9pbihyb3duYW1lc190b19jb2x1bW4ocmVzT3JkZXJlZCx2YXIgPSAiZW5zZ2VuZSIpLCBncmNoMzgsIGJ5ID0gImVuc2dlbmUiKSAlPiUgc2VsZWN0KHN5bWJvbCxsb2cyRm9sZENoYW5nZSxwYWRqKQoKcmVzX2Zvcl90YWJsZSA8LSByZXNPcmRlcmVkICAlPiUgZHBseXI6OmZpbHRlcihwYWRqIDwgMC4xKQoKcmV0dXJuKGxpc3QocmVzT3JkZXJlZD1yZXNPcmRlcmVkLHJlc19mb3JfdGFibGU9cmVzX2Zvcl90YWJsZSkpCn0KCm15X3JlczwtREdFKG15X2NvbWJpbmF0aW9ucyRmaXJzdFsxXSxteV9jb21iaW5hdGlvbnMkc2Vjb25kWzFdKQpkYXRhdGFibGUobXlfcmVzJHJlc19mb3JfdGFibGUsIGV4dGVuc2lvbnMgPSAnQnV0dG9ucycsCiAgICAgICAgICBjYXB0aW9uID0gcGFzdGUobXlfY29tYmluYXRpb25zJGZpcnN0WzFdLCIgdnMgIixteV9jb21iaW5hdGlvbnMkc2Vjb25kWzFdKSwKICAgICAgICAgIG9wdGlvbnMgPSBsaXN0KGRvbSA9ICdCZnJ0aXAnLAogICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJykpKQpgYGAKCgpgYGB7ciBldmFsID0gRkFMU0V9CnBsb3RfZ3NlYSA8LSBmdW5jdGlvbihyZXMpewpyZXMgPC0gcmVzW2NvbXBsZXRlLmNhc2VzKHJlcyksXQpyZXMkZmNTaWduIDwtIHNpZ24ocmVzJGxvZzJGb2xkQ2hhbmdlKQpyZXMkbG9nUCA8LSAtbG9nMTAocmVzJHBhZGopCnJlcyRtZXRyaWMgPC0gcmVzJGxvZ1AvcmVzJGZjU2lnbgp5PC1yZXNbLGMoInN5bWJvbCIsICJtZXRyaWMiKV0KZ2VuZUxpc3QgPC0geSRtZXRyaWMKbmFtZXMoZ2VuZUxpc3QpIDwtIHkkc3ltYm9sCmdlbmVMaXN0IDwtIGdlbmVMaXN0W29yZGVyKGdlbmVMaXN0LCBkZWNyZWFzaW5nID0gVCldCmZnc2VhUmVzIDwtIGZnc2VhKGhhbGxtYXJrLCBnZW5lTGlzdCwgbnBlcm09MTAwMDAsIG1heFNpemUgPSA1MDApCmZnc2VhUmVzIDwtIGZnc2VhUmVzW2Znc2VhUmVzJHBhZGogPCAwLjA1LF0KcGxvdEdzZWFUYWJsZShoYWxsbWFya1tmZ3NlYVJlcyRwYXRod2F5XSwgZ2VuZUxpc3QsIGZnc2VhUmVzLCBnc2VhUGFyYW0gPSAwLjQpCn0KCnBsb3RfZ3NlYShteV9yZXMkcmVzT3JkZXJlZCkKYGBgCgojIyMgMi4KCmBgYHtyIGV2YWwgPSBGQUxTRX0KbXlfcmVzPC1ER0UobXlfY29tYmluYXRpb25zJGZpcnN0WzJdLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbMl0pCmRhdGF0YWJsZShteV9yZXMkcmVzX2Zvcl90YWJsZSwgZXh0ZW5zaW9ucyA9ICdCdXR0b25zJywKICAgICAgICAgIGNhcHRpb24gPSBwYXN0ZShteV9jb21iaW5hdGlvbnMkZmlyc3RbMl0sIiB2cyAiLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbMl0pLAogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gJ0JmcnRpcCcsYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJykpKQpgYGAKCgpgYGB7ciBldmFsID0gRkFMU0V9CnBsb3RfZ3NlYShteV9yZXMkcmVzT3JkZXJlZCkKYGBgCgojIyMgMy4KCmBgYHtyIGV2YWwgPSBGQUxTRX0KbXlfcmVzPC1ER0UobXlfY29tYmluYXRpb25zJGZpcnN0WzNdLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbM10pCmRhdGF0YWJsZShteV9yZXMkcmVzX2Zvcl90YWJsZSwgZXh0ZW5zaW9ucyA9ICdCdXR0b25zJywKICAgICAgICAgIGNhcHRpb24gPSBwYXN0ZShteV9jb21iaW5hdGlvbnMkZmlyc3RbM10sIiB2cyAiLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbM10pLAogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gJ0JmcnRpcCcsYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJykpKQpgYGAKCgpgYGB7ciBldmFsID0gRkFMU0V9CnBsb3RfZ3NlYShteV9yZXMkcmVzT3JkZXJlZCkKYGBgCgojIyMgNC4KCmBgYHtyIGV2YWwgPSBGQUxTRX0KbXlfcmVzPC1ER0UobXlfY29tYmluYXRpb25zJGZpcnN0WzRdLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbNF0pCmRhdGF0YWJsZShteV9yZXMkcmVzX2Zvcl90YWJsZSwgZXh0ZW5zaW9ucyA9ICdCdXR0b25zJywKICAgICAgICAgIGNhcHRpb24gPSBwYXN0ZShteV9jb21iaW5hdGlvbnMkZmlyc3RbNF0sIiB2cyAiLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbNF0pLAogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gJ0JmcnRpcCcsYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJykpKQpgYGAKCgpgYGB7ciBldmFsID0gRkFMU0V9CnBsb3RfZ3NlYShteV9yZXMkcmVzT3JkZXJlZCkKYGBgCgojIyMgNS4KCmBgYHtyIGV2YWwgPSBGQUxTRX0KbXlfcmVzPC1ER0UobXlfY29tYmluYXRpb25zJGZpcnN0WzVdLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbNV0pCmRhdGF0YWJsZShteV9yZXMkcmVzX2Zvcl90YWJsZSwgZXh0ZW5zaW9ucyA9ICdCdXR0b25zJywKICAgICAgICAgIGNhcHRpb24gPSBwYXN0ZShteV9jb21iaW5hdGlvbnMkZmlyc3RbNV0sIiB2cyAiLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbNV0pLAogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gJ0JmcnRpcCcsYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJykpKQpgYGAKCgpgYGB7ciBldmFsID0gRkFMU0V9CnBsb3RfZ3NlYShteV9yZXMkcmVzT3JkZXJlZCkKYGBgCgojIyMgNi4KCmBgYHtyIGV2YWwgPSBGQUxTRX0KbXlfcmVzPC1ER0UobXlfY29tYmluYXRpb25zJGZpcnN0WzZdLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbNl0pCmRhdGF0YWJsZShteV9yZXMkcmVzX2Zvcl90YWJsZSwgZXh0ZW5zaW9ucyA9ICdCdXR0b25zJywKICAgICAgICAgIGNhcHRpb24gPSBwYXN0ZShteV9jb21iaW5hdGlvbnMkZmlyc3RbNl0sIiB2cyAiLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbNl0pLAogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gJ0JmcnRpcCcsYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJykpKQpgYGAKCgpgYGB7ciBldmFsID0gRkFMU0V9CnBsb3RfZ3NlYShteV9yZXMkcmVzT3JkZXJlZCkKYGBgCgojIyMgNy4KCmBgYHtyIGV2YWwgPSBGQUxTRX0KbXlfcmVzPC1ER0UobXlfY29tYmluYXRpb25zJGZpcnN0WzddLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbN10pCmRhdGF0YWJsZShteV9yZXMkcmVzX2Zvcl90YWJsZSwgZXh0ZW5zaW9ucyA9ICdCdXR0b25zJywKICAgICAgICAgIGNhcHRpb24gPSBwYXN0ZShteV9jb21iaW5hdGlvbnMkZmlyc3RbN10sIiB2cyAiLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbN10pLAogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gJ0JmcnRpcCcsYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJykpKQpgYGAKCgpgYGB7ciBldmFsID0gRkFMU0V9CnBsb3RfZ3NlYShteV9yZXMkcmVzT3JkZXJlZCkKYGBgCgojIyMgOC4KCmBgYHtyIGV2YWwgPSBGQUxTRX0KbXlfcmVzPC1ER0UobXlfY29tYmluYXRpb25zJGZpcnN0WzhdLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbOF0pCmRhdGF0YWJsZShteV9yZXMkcmVzX2Zvcl90YWJsZSwgZXh0ZW5zaW9ucyA9ICdCdXR0b25zJywKICAgICAgICAgIGNhcHRpb24gPSBwYXN0ZShteV9jb21iaW5hdGlvbnMkZmlyc3RbOF0sIiB2cyAiLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbOF0pLAogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gJ0JmcnRpcCcsYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJykpKQpgYGAKCgpgYGB7ciBldmFsID0gRkFMU0V9CnBsb3RfZ3NlYShteV9yZXMkcmVzT3JkZXJlZCkKYGBgCgojIyMgOS4KCmBgYHtyIGV2YWwgPSBGQUxTRX0KbXlfcmVzPC1ER0UobXlfY29tYmluYXRpb25zJGZpcnN0WzldLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbOV0pCmRhdGF0YWJsZShteV9yZXMkcmVzX2Zvcl90YWJsZSwgZXh0ZW5zaW9ucyA9ICdCdXR0b25zJywKICAgICAgICAgIGNhcHRpb24gPSBwYXN0ZShteV9jb21iaW5hdGlvbnMkZmlyc3RbOV0sIiB2cyAiLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbOV0pLAogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gJ0JmcnRpcCcsYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJykpKQpgYGAKCgpgYGB7ciBldmFsID0gRkFMU0V9CnBsb3RfZ3NlYShteV9yZXMkcmVzT3JkZXJlZCkKYGBgCgoKIyMjIDEwLgoKYGBge3IgZXZhbCA9IEZBTFNFfQpteV9yZXM8LURHRShteV9jb21iaW5hdGlvbnMkZmlyc3RbMTBdLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbMTBdKQpkYXRhdGFibGUobXlfcmVzJHJlc19mb3JfdGFibGUsIGV4dGVuc2lvbnMgPSAnQnV0dG9ucycsCiAgICAgICAgICBjYXB0aW9uID0gcGFzdGUobXlfY29tYmluYXRpb25zJGZpcnN0WzEwXSwiIHZzICIsbXlfY29tYmluYXRpb25zJHNlY29uZFsxMF0pLAogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gJ0JmcnRpcCcsYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJykpKQpgYGAKCgpgYGB7ciBldmFsID0gRkFMU0V9CnBsb3RfZ3NlYShteV9yZXMkcmVzT3JkZXJlZCkKYGBgCgoKIyMjIDExLgoKYGBge3IgZXZhbCA9IEZBTFNFfQpteV9yZXM8LURHRShteV9jb21iaW5hdGlvbnMkZmlyc3RbMTFdLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbMTFdKQpkYXRhdGFibGUobXlfcmVzJHJlc19mb3JfdGFibGUsIGV4dGVuc2lvbnMgPSAnQnV0dG9ucycsCiAgICAgICAgICBjYXB0aW9uID0gcGFzdGUobXlfY29tYmluYXRpb25zJGZpcnN0WzExXSwiIHZzICIsbXlfY29tYmluYXRpb25zJHNlY29uZFsxMV0pLAogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gJ0JmcnRpcCcsYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJykpKQpgYGAKCgpgYGB7ciBldmFsID0gRkFMU0V9CnBsb3RfZ3NlYShteV9yZXMkcmVzT3JkZXJlZCkKYGBgCgoKCiMjIyAxMi4KCmBgYHtyIGV2YWwgPSBGQUxTRX0KbXlfcmVzPC1ER0UobXlfY29tYmluYXRpb25zJGZpcnN0WzEyXSxteV9jb21iaW5hdGlvbnMkc2Vjb25kWzEyXSkKZGF0YXRhYmxlKG15X3JlcyRyZXNfZm9yX3RhYmxlLCBleHRlbnNpb25zID0gJ0J1dHRvbnMnLAogICAgICAgICAgY2FwdGlvbiA9IHBhc3RlKG15X2NvbWJpbmF0aW9ucyRmaXJzdFsxMl0sIiB2cyAiLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbMTJdKSwKICAgICAgICAgIG9wdGlvbnMgPSBsaXN0KGRvbSA9ICdCZnJ0aXAnLGJ1dHRvbnMgPSBjKCdjb3B5JywgJ2NzdicsICdleGNlbCcpKSkKYGBgCgoKYGBge3IgZXZhbCA9IEZBTFNFfQpwbG90X2dzZWEobXlfcmVzJHJlc09yZGVyZWQpCmBgYAoKCgojIyMgMTMuCgpgYGB7ciBldmFsID0gRkFMU0V9Cm15X3JlczwtREdFKG15X2NvbWJpbmF0aW9ucyRmaXJzdFsxM10sbXlfY29tYmluYXRpb25zJHNlY29uZFsxM10pCmRhdGF0YWJsZShteV9yZXMkcmVzX2Zvcl90YWJsZSwgZXh0ZW5zaW9ucyA9ICdCdXR0b25zJywKICAgICAgICAgIGNhcHRpb24gPSBwYXN0ZShteV9jb21iaW5hdGlvbnMkZmlyc3RbMTNdLCIgdnMgIixteV9jb21iaW5hdGlvbnMkc2Vjb25kWzEzXSksCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAnQmZydGlwJyxidXR0b25zID0gYygnY29weScsICdjc3YnLCAnZXhjZWwnKSkpCmBgYAoKCmBgYHtyIGV2YWwgPSBGQUxTRX0KcGxvdF9nc2VhKG15X3JlcyRyZXNPcmRlcmVkKQpgYGAKCgojIyMgMTQuCgoKYGBge3IgZXZhbCA9IEZBTFNFfQpteV9yZXM8LURHRShteV9jb21iaW5hdGlvbnMkZmlyc3RbMTRdLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbMTRdKQpkYXRhdGFibGUobXlfcmVzJHJlc19mb3JfdGFibGUsIGV4dGVuc2lvbnMgPSAnQnV0dG9ucycsCiAgICAgICAgICBjYXB0aW9uID0gcGFzdGUobXlfY29tYmluYXRpb25zJGZpcnN0WzE0XSwiIHZzICIsbXlfY29tYmluYXRpb25zJHNlY29uZFsxNF0pLAogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gJ0JmcnRpcCcsYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJykpKQpgYGAKCgpgYGB7ciBldmFsID0gRkFMU0V9CnBsb3RfZ3NlYShteV9yZXMkcmVzT3JkZXJlZCkKYGBgCgoKIyMjIDE1LgoKCmBgYHtyIGV2YWwgPSBGQUxTRX0KbXlfcmVzPC1ER0UobXlfY29tYmluYXRpb25zJGZpcnN0WzE1XSxteV9jb21iaW5hdGlvbnMkc2Vjb25kWzE1XSkKZGF0YXRhYmxlKG15X3JlcyRyZXNfZm9yX3RhYmxlLCBleHRlbnNpb25zID0gJ0J1dHRvbnMnLAogICAgICAgICAgY2FwdGlvbiA9IHBhc3RlKG15X2NvbWJpbmF0aW9ucyRmaXJzdFsxNV0sIiB2cyAiLG15X2NvbWJpbmF0aW9ucyRzZWNvbmRbMTVdKSwKICAgICAgICAgIG9wdGlvbnMgPSBsaXN0KGRvbSA9ICdCZnJ0aXAnLGJ1dHRvbnMgPSBjKCdjb3B5JywgJ2NzdicsICdleGNlbCcpKSkKYGBgCgoKYGBge3IgZXZhbCA9IEZBTFNFfQpwbG90X2dzZWEobXlfcmVzJHJlc09yZGVyZWQpCmBgYA==